package com.uade.empresasdistribuidas.model;

import java.sql.Date;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import com.uade.empresasdistribuidas.entities.PedidoDTO;
import com.uade.empresasdistribuidas.entities.PedidoLocalDTO;
import com.uade.empresasdistribuidas.entities.RemitoDTO;
import com.uade.empresasdistribuidas.entities.RemitoExternoDTO;
import com.uade.empresasdistribuidas.entities.RemitoInternoDTO;
import com.uade.empresasdistribuidas.exception.PedidoNotFoundException;
import com.uade.empresasdistribuidas.view.IniciarPedidoView;

public class PedidoLocal extends Pedido {
	
	private static final Float PRECIO_KILO = 30f;
	
	public PedidoLocal(IniciarPedidoView iniciarPedidoView) {
		super(iniciarPedidoView);
	}

	public PedidoLocal(PedidoDTO pedido) {
		super(pedido);
		
	}

	public PedidoLocal(Integer pedidoId, String dniDestinatario) throws PedidoNotFoundException{
		super(pedidoId,dniDestinatario);
	}

	@Override
	public void persistirPedido() {
		PedidoLocalDTO pedidoLocal=(PedidoLocalDTO) pedido;
		cliente= new Cliente(pedidoLocal.getIdCliente());
		pedidoLocal.setCliente(cliente.getCliente());
		pedidoLocal.setFactura(crearFactura(this.getPedido().obtenerCostoEnvio(),getPedido().obtenerPesoPedido()*PRECIO_KILO));
		pedidoLocal.setRecibo(crearRecibo());
		pedidoLocal.setRemitos(crearRemitos());
		this.setPedido(getPedidoDAO().makePersistent(pedidoLocal));
	}


	
	protected List<RemitoDTO> crearRemitos() {
		RemitoDTO remitoInterno = new RemitoInternoDTO();
		remitoInterno.setFechaCreacion(new Date(Calendar.getInstance().getTimeInMillis()));
		remitoInterno.setDescripcion("Recibí conformemente los objetos enviados por "+pedido.getCliente().getNombre() );
		remitoInterno.setPedido(pedido);
		
		RemitoDTO remitoExterno = new RemitoExternoDTO();
		remitoExterno.setFechaCreacion(new Date(Calendar.getInstance().getTimeInMillis()));
		remitoExterno.setDescripcion("Yo "+pedido.getNombreDestinatario()+" . Recibí conformemente los objetos enviados por "+pedido.getCliente().getNombre() );
		remitoExterno.setPedido(pedido);
		
		List<RemitoDTO> remitos = new ArrayList<RemitoDTO>();
		remitos.add(remitoExterno);
		remitos.add(remitoInterno);
		
		return remitos;
	}

	public Float obtenerCostoEnvio() {
		
		return pedido.obtenerCostoEnvio();
	}
	

	
}
